/**
 * 文件后缀名
 * mpeg：可以是视频也可以是音频。事例就是上传一个mp3文件，变成了mpeg
 * 针对mpeg格式在上传时就做了特殊处理，不采用mepg，而是原有的文件名后缀
 * 如果原有的文件名后缀不满足，则采用上传时定下的文件类型为标准。如果为all，则无法明确判断
 */
const extname = {
	image: ['bmp', 'jpg', 'jpeg', 'png', 'tiff', 'gif', 'pcx', 'tga', 'exif', 'fpx', 'svg', 'psd'],
	video: ['mpg', 'avi', 'rm', 'rmvb', 'mov', 'wmv', 'asf', 'dat', 'asx', 'wvx', 'mpe', 'mpa', 'mp4'],
	excel: ['XLS', 'XLSX'],
	audio: ['MP3', 'AAC', 'WAV', 'WMA', 'CDA', 'FLAC', 'M4A', 'MID', 'MKA', 'MP2', 'MPA', 'MPC', 'APE', 'OFR', 'OGG', 'RA', 'WV', 'TTA', 'AC3', 'DTS']
}

/**
 * 通过url地址和后缀名判断类型
 * 优先以.后缀名判断
 * 再通过.前面的最后部分判断
 * 
 * @param {String} url 文件地址
 */
const typeFromUrl = (url) => {
	if (url) {
		const array = Object.keys(extname)
		const arr = url.split('.')
		var str
		const action = () => {
			if (extname[str]) {
				// 优先直接取
				return str
			}
			// 再遍历所有的后缀名，看是否包含
			str = str.toUpperCase()
			for (let h = 0; h < array.length; h++) {
				for (let i = 0; i < extname[array[h]].length; i++) {
					if (extname[array[h]][i].toUpperCase() === str) {
						return array[h]
					}
				}
			}
			return undefined
		}
		
		if (arr.length > 1) {
			// 优先以.后判断
			str = arr[arr.length - 1]
			str = action()
			if (str) {
				return str
			}
		}
		// 再通过.前的最后部分判断
		str = arr[0].split('/').pop().split('-').pop()
		str = action()
		if (str) {
			return str
		}
		return 'all'
	}
	return undefined
}

/**
 * 文件后缀名初始化
 * 大小写都要有
 */
const initial = (type) => {
	if (extname[type]) {
		const arr = []
		extname[type].map(str => {
			arr.push(str.toUpperCase())
			arr.push(str.toLowerCase())
		})
		return arr
	}
	return undefined
}

module.exports = {
	initial,
	typeFromUrl
}